package com.vdong.trade.order.service;

import com.github.pagehelper.PageInfo;
import com.vdong.trade.order.entity.dto.param.ChannelCurveParamDTO;
import com.vdong.trade.order.entity.dto.param.DistributionOrdersParamDTO;
import com.vdong.trade.order.entity.dto.param.OrderStateMachineParamDTO;
import com.vdong.trade.order.entity.dto.result.*;
import com.vdong.trade.order.entity.po.CountOrderPO;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @description: 主订单接口
 * @author: Mr.WangGang
 * @create: 2018-11-29 上午 11:15
 **/
public interface OrderService {

    OrderStateMachineResultDTO execute(@Valid @NotNull OrderStateMachineParamDTO param);

    /**
     * 渠道数据 -订单数曲线图
     *
     * @param copy
     * @return
     */
    List<ChannelCurveResultDTO> channelCurve(ChannelCurveParamDTO copy);


    /**
     * 分销订单列表
     *
     * @param param
     * @return
     */
    PageInfo<DistributionOrdersResultDTO> DistributionOrderList(DistributionOrdersParamDTO param);

    /**
     * 分销订单详情
     *
     * @param param
     * @return
     */
    DistributionOrderDetailResultDTO DistributionOrderDetail(DistributionOrdersParamDTO param);


    /**
     * 财务中心收入明细列表
     *
     * @param param
     * @return
     */
    PageInfo<DetailEarningListResultDTO> DetailEarningList(DistributionOrdersParamDTO param);


    /**
     * 财务中心收入明细详情
     *
     * @param param
     * @return
     */
    DetailEarningDetailDTO DetailEarningDetail(DistributionOrdersParamDTO param);

    /**
     * 日月总订单数
     *
     * @param param
     * @return
     */
    CountOrderResultDTO countOrder(CountOrderPO param);

    /**
     * 推客分销订单
     *
     * @param param
     * @return
     */
    PageInfo<PeddleDistributionListResultDTO> peddleDistributionOrderList(DistributionOrdersParamDTO param);


    /**
     * 交易明细 列表
     *
     * @param param
     * @return
     */
    PageInfo<DetailEarningListResultDTO> transactionList(DistributionOrdersParamDTO param);

    /**
     * 交易详情
     *
     * @param copy
     * @return
     */
    TransactionDetailResultDTO transactionDetail(DistributionOrdersParamDTO copy);

    /**
     * 热销榜
     *
     * @return
     */
    PageInfo<SellHotResultDTO> sellHot(DistributionOrdersParamDTO type);

    /**
     * 推客收入组成
     */
    PageInfo<PeddleIncomeFormDTO> pusherEarnings(DistributionOrdersParamDTO param) throws Exception;
}
